package cn.mandifal.seller.service.impl;

import cn.mandifal.mapper.DpSpecificationOptMapper;
import cn.mandifal.pojo.DpSpecificationOpt;
import cn.mandifal.pojo.DpSpecificationOptExample;
import cn.mandifal.seller.service.GoodsTemplateService;
import cn.mandifal.mapper.DpTypeTempMapper;
import cn.mandifal.pojo.DpTypeTemp;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSON;
import org.apache.ibatis.scripting.xmltags.ForEachSqlNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 商品分类服务的实现层
 * @author
 */
@Service
@Transactional
public class GoodsTemplateServiceImpl implements GoodsTemplateService {
    @Autowired
    private DpTypeTempMapper dpTypeTempMapper;

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<DpTypeTemp> findAll() {
        return dpTypeTempMapper.selectByExample(null);
    }

    /**
     * 详情
     * @param id
     * @return
     */
    @Override
    public DpTypeTemp findOne(Long id) {
        return dpTypeTempMapper.selectByPrimaryKey(id);
    }

    /**
     * 查询模板表，找到 spec_id,然后通过 id 查询规格选项表，得到规格选项
     * @param id 模板 id
     * @return
     */
    @Autowired
    private DpSpecificationOptMapper dpSpecificationOptMapper;
    @Override
    public List<Map> findSpecIdAndOption(Long id) {
        DpTypeTemp dpTypeTemp = dpTypeTempMapper.selectByPrimaryKey(id);
        //用 fastJSON 转换得到的 string为 array 类型，指定转换后的 list 中数据类型
        List<Map> list = JSON.parseArray(dpTypeTemp.getSpecIds(), Map.class);
        //遍历得到的 spec_id
        for (Map map: list) {
            DpSpecificationOptExample dpSpecificationOptExample=new DpSpecificationOptExample();
            DpSpecificationOptExample.Criteria criteria = dpSpecificationOptExample.createCriteria();
            //根据 id 得到 map 中的值，转换成 Long 类型
            criteria.andSpecIdEqualTo(new Long((Integer)map.get("id")));
            //根据 spec_id 查询规格选项
            List<DpSpecificationOpt> dpSpecificationOpts = dpSpecificationOptMapper.selectByExample(dpSpecificationOptExample);
            map.put("options",dpSpecificationOpts);
        }
        return list;
    }
}